<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */

/**
 * Smarty {counter} function plugin
 *
 * Type:     function<br>
 * Name:     counter<br>
 * Purpose:  print out a counter value
 * @author Monte Ohrt <monte at ohrt dot com>
 * @link http://smarty.php.net/manual/en/language.function.counter.php {counter}
 * (Smarty online manual)
 * @param array parameters
 * @param Smarty
 * @return string|null
 */
function smarty_function_counter($params, &$smarty) {
	static $counters = array ();
	
	$name = (isset ( $params ['name'] )) ? $params ['name'] : 'default';
	if (! isset ( $counters [$name] )) {
		$counters [$name] = array ('start' => 1, 'skip' => 1, 'direction' => 'up', 'count' => 1 );
	}
	$counter = & $counters [$name];
	
	if (isset ( $params ['start'] )) {
		$counter ['start'] = $counter ['count'] = ( int ) $params ['start'];
	}
	
	if (! empty ( $params ['assign'] )) {
		$counter ['assign'] = $params ['assign'];
	}
	
	if (isset ( $counter ['assign'] )) {
		$smarty->assign ( $counter ['assign'], $counter ['count'] );
	}
	
	if (isset ( $params ['print'] )) {
		$print = ( bool ) $params ['print'];
	} else {
		$print = empty ( $counter ['assign'] );
	}
	
	if ($print) {
		$retval = $counter ['count'];
	} else {
		$retval = null;
	}
	
	if (isset ( $params ['skip'] )) {
		$counter ['skip'] = $params ['skip'];
	}
	
	if (isset ( $params ['direction'] )) {
		$counter ['direction'] = $params ['direction'];
	}
	
	if ($counter ['direction'] == "down")
		$counter ['count'] -= $counter ['skip'];
	else
		$counter ['count'] += $counter ['skip'];
	
	return $retval;

}

/* vim: set expandtab: */

?>
